home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / games / 575 / 3deis / setz_ab.gfa (.txt) < prev    next >
GFA-BASIC Atari  |  1986-02-05  |  25KB  |  1,164 lines

  1. @vorbereitung
  2. @laden
  3. @titelbild
  4. @level
  5. @hilfs_bs
  6. @bildaufbau
  7. @zufall
  8. @anzeige
  9. zeit%=TIMER
  10. ON BREAK GOSUB ende
  11. ON MENU KEY GOSUB abfrage
  12. DO
  13.   t|=(TIMER-zeit%)/200
  14.   IF t|=intervall|
  15.     @tief_schieben
  16.     @anzeige
  17.     zeit%=TIMER
  18.   ENDIF
  19.   ON MENU
  20. LOOP
  21. > PROCEDURE vorbereitung
  22.   IF XBIOS(4)<>2
  23.     ALERT 3,"|Sorry, das Programm läuft nur|mit einem Monochrom-Monitor !",1,"Schade!",dummy&
  24.     SYSTEM
  25.   ENDIF
  26.   DIM p.feld|(2,2,3),f.feld|(2,2,3),feld|(11,2,3),hoch|(2,3),hoch1|(2,3)
  27.   DIM x&(3),y&(3),s|(10),li|(10),ob|(10),screen%(1),nam$(12),pkt%(12)
  28.   RESERVE FRE(0)-33000
  29.   adresse%=GEMDOS(&H48,L:32256)
  30.   screen%(0)=INT(adresse%/256)*256+256
  31.   screen%(1)=XBIOS(3)
  32.   DEFMOUSE 0
  33.   DEFFILL 1,1
  34.   PBOX 0,0,640,399
  35.   leer$="      "
  36.   leer1$="    "
  37.   ARRAYFILL hoch|(),10
  38.   FOR j|=0 TO 2
  39.     FOR k|=0 TO 3
  40.       feld|(10,j|,k|)=1
  41.     NEXT k|
  42.   NEXT j|
  43. RETURN
  44. > PROCEDURE abfrage
  45.   IF MENU(13)=2
  46.     SELECT SHR&(MENU(14),8)
  47.     CASE 72
  48.       @oben_rollen
  49.     CASE 80
  50.       @unten_rollen
  51.     CASE 75
  52.       @links_rollen
  53.     CASE 77
  54.       @rechts_rollen
  55.     CASE 71
  56.       @rechts_drehen
  57.     CASE 82
  58.       @links_drehen
  59.     ENDSELECT
  60.   ELSE
  61.     SELECT SHR&(MENU(14),8)
  62.     CASE 1
  63.       @ende
  64.     CASE 15
  65.       SGET bild1$
  66.       @best_liste
  67.       SPUT bild1$
  68.       zeit%=TIMER-t|*200
  69.     CASE 72
  70.       @oben_schieben
  71.     CASE 80
  72.       @unten_schieben
  73.     CASE 75
  74.       @links_schieben
  75.     CASE 77
  76.       @rechts_schieben
  77.     CASE 57
  78.       doppel|=1
  79.       @setzen
  80.       CLR e|,e1|
  81.       ARRAYFILL f.feld|(),0
  82.       zeit%=TIMER
  83.       @zufall
  84.     CASE 98
  85.       SGET bild1$
  86.       @hilfs_bs
  87.       SPUT bild1$
  88.       zeit%=TIMER-t|*200
  89.     ENDSELECT
  90.   ENDIF
  91.   @anzeige
  92.   REPEAT
  93.   UNTIL INKEY$=""
  94. RETURN
  95. > PROCEDURE bildaufbau
  96.   VOID XBIOS(5,L:screen%(0),L:screen%(1),-1)
  97.   DEFFILL 1,2,4
  98.   PBOX 0,0,639,399
  99.   DEFFILL 0,0
  100.   PBOX 18,18,502,382
  101.   RESTORE seiten
  102.   FOR i|=0 TO 10
  103.     READ s|(i|)
  104.   NEXT i|
  105. seiten:
  106.   DATA 120,99,81,67,55,45,37,30,25,20,16
  107.   xm&=260
  108.   ym|=200
  109.   DEFLINE 3
  110.   FOR i|=0 TO 10
  111.     BOX xm&-2*s|(i|),ym|-1.5*s|(i|),xm&+2*s|(i|),ym|+1.5*s|(i|)
  112.     li|(i|)=xm&-2*s|(i|)
  113.     ob|(i|)=ym|-1.5*s|(i|)
  114.   NEXT i|
  115.   DEFLINE 1
  116.   BOX 228,176,292,224
  117.   ALINE 228,192,292,192,1,-1,0
  118.   ALINE 228,208,292,208,1,-1,0
  119.   ALINE xm&,176,xm&,224,1,-1,0
  120.   ALINE 244,176,244,224,1,-1,0
  121.   ALINE 276,176,276,224,1,-1,0
  122.   FOR i|=0 TO 4
  123.     ALINE 20+i|*120,20,228+i|*16,176,1,&HF0F,0
  124.     ALINE 20+i|*120,380,228+i|*16,224,1,&HF0F,0
  125.   NEXT i|
  126.   ALINE 20,140,228,192,1,&HF0F,0
  127.   ALINE 20,260,228,208,1,&HF0F,0
  128.   ALINE 500,140,292,192,1,&HF0F,0
  129.   ALINE 500,260,292,208,1,&HF0F,0
  130.   DEFFILL 0,0
  131.   FOR i&=20 TO 353 STEP 37
  132.     PBOX 509,i&,551,i&+32
  133.     BOX 510,i&+1,550,i&+31
  134.     ALINE 510,i&+11,550,i&+11,1,-1,0
  135.     ALINE 510,i&+21,550,i&+21,1,-1,0
  136.     ALINE 520,SUCC(i&),520,i&+31,1,-1,0
  137.     ALINE 530,SUCC(i&),530,i&+31,1,-1,0
  138.     ALINE 540,SUCC(i&),540,i&+31,1,-1,0
  139.   NEXT i&
  140.   FOR i&=10 TO 340 STEP 78
  141.     PBOX 560,i&,630,i&+68
  142.     BOX 562,i&+2,628,i&+66
  143.   NEXT i&
  144.   BOX 570,50,620,70
  145.   BOX 570,128,620,148
  146.   BOX 570,206,620,226
  147.   BOX 570,284,620,304
  148.   ALINE 562,345,628,345,1,-1,0
  149.   ALINE 562,362,628,362,1,-1,0
  150.   DEFTEXT ,,,6
  151.   TEXT 566,22,58,"Gesetzte"
  152.   TEXT 566,100,58,"Erreichte"
  153.   TEXT 566,178,58,"Höchste"
  154.   TEXT 564,256,63,"Zeit   s"
  155.   TEXT 564,356,62,"ESC->Ende"
  156.   TEXT 564,373,45,"HELP->"
  157.   TEXT 588,385,39,"Hilfe"
  158.   TEXT 600,256,intervall|
  159.   DEFTEXT ,,,13
  160.   TEXT 566,40,"Figuren"
  161.   TEXT 566,118,58,"Punkte"
  162.   RSET leer$=STR$(h_punkte%)
  163.   TEXT 571,222,leer$
  164.   TEXT 566,196,58,"Punkte"
  165.   TEXT 566,274,58,"Level"
  166.   TEXT 566,340,58,"Tasten"
  167.   PRINT AT(75,19);level|
  168.   BMOVE screen%(0),screen%(1),32000
  169.   VOID XBIOS(5,L:screen%(1),L:screen%(1),-1)
  170.   SGET bild$
  171. RETURN
  172. > PROCEDURE anzeige
  173.   VSYNC
  174.   BMOVE screen%(0),screen%(1),32000
  175.   FOR i|=0 TO 2
  176.     FOR j|=0 TO 2
  177.       FOR k|=0 TO 3
  178.         IF f.feld|(i|,j|,k|)
  179.           CLR wuerfel|
  180.           @berechnen
  181.           @zeichnen
  182.         ENDIF
  183.       NEXT k|
  184.     NEXT j|
  185.   NEXT i|
  186. RETURN
  187. > PROCEDURE berechnen
  188.   SELECT i|
  189.   CASE 0
  190.     IF f.feld|(SUCC(i|),j|,k|)
  191.       ADD wuerfel|,32
  192.     ENDIF
  193.   CASE 1
  194.     IF f.feld|(SUCC(i|),j|,k|)
  195.       ADD wuerfel|,32
  196.     ENDIF
  197.     IF f.feld|(PRED(i|),j|,k|)
  198.       ADD wuerfel|,16
  199.     ENDIF
  200.   CASE 2
  201.     IF f.feld|(PRED(i|),j|,k|)
  202.       ADD wuerfel|,16
  203.     ENDIF
  204.   ENDSELECT
  205.   SELECT j|
  206.   CASE 0
  207.     IF f.feld|(i|,SUCC(j|),k|)
  208.       ADD wuerfel|,8
  209.     ENDIF
  210.   CASE 1
  211.     IF f.feld|(i|,SUCC(j|),k|)
  212.       ADD wuerfel|,8
  213.     ENDIF
  214.     IF f.feld|(i|,PRED(j|),k|)
  215.       ADD wuerfel|,2
  216.     ENDIF
  217.   CASE 2
  218.     IF f.feld|(i|,PRED(j|),k|)
  219.       ADD wuerfel|,2
  220.     ENDIF
  221.   ENDSELECT
  222.   SELECT k|
  223.   CASE 0
  224.     IF f.feld|(i|,j|,SUCC(k|))
  225.       ADD wuerfel|,4
  226.     ENDIF
  227.   CASE 3
  228.     IF f.feld|(i|,j|,PRED(k|))
  229.       INC wuerfel|
  230.     ENDIF
  231.   DEFAULT
  232.     IF f.feld|(i|,j|,SUCC(k|))
  233.       ADD wuerfel|,4
  234.     ENDIF
  235.     IF f.feld|(i|,j|,PRED(k|))
  236.       INC wuerfel|
  237.     ENDIF
  238.   ENDSELECT
  239. RETURN
  240. > PROCEDURE zeichnen
  241.   LOCAL lx1&,lx2&,lx3&,lx4&,oy1&,oy2&,oy3&,oy4&,l|
  242.   e|=ADD(e1|,i|)
  243.   lx1&=ADD(li|(e|),s|(e|)*k|)
  244.   lx2&=ADD(li|(SUCC(e|)),s|(SUCC(e|))*k|)
  245.   lx3&=ADD(lx1&,s|(e|))
  246.   lx4&=ADD(lx2&,s|(SUCC(e|)))
  247.   oy1&=ADD(ob|(e|),s|(e|)*j|)
  248.   oy3&=ADD(ob|(e|),s|(e|)*SUCC(j|))
  249.   oy2&=ADD(ob|(SUCC(e|)),s|(SUCC(e|))*j|)
  250.   oy4&=ADD(ob|(SUCC(e|)),s|(SUCC(e|))*SUCC(j|))
  251.   FOR l|=1 TO doppel|
  252.     IF BTST(wuerfel|,0)=FALSE
  253.       IF BTST(wuerfel|,1)=FALSE
  254.         ALINE lx1&,oy1&,lx2&,oy2&,1,TRUE,FALSE
  255.       ENDIF
  256.       IF BTST(wuerfel|,4)=FALSE
  257.         ALINE lx1&,oy1&,lx1&,oy3&,1,TRUE,FALSE
  258.       ENDIF
  259.       IF BTST(wuerfel|,5)=FALSE
  260.         ALINE lx2&,oy2&,lx2&,oy4&,1,TRUE,FALSE
  261.       ENDIF
  262.     ENDIF
  263.     IF BTST(wuerfel|,1)=FALSE
  264.       IF BTST(wuerfel|,2)=FALSE
  265.         ALINE lx3&,oy1&,lx4&,oy2&,1,TRUE,FALSE
  266.       ENDIF
  267.       IF BTST(wuerfel|,4)=FALSE
  268.         ALINE lx1&,oy1&,lx3&,oy1&,1,TRUE,FALSE
  269.       ENDIF
  270.       IF BTST(wuerfel|,5)=FALSE
  271.         ALINE lx2&,oy2&,lx4&,oy2&,1,TRUE,FALSE
  272.       ENDIF
  273.     ENDIF
  274.     IF BTST(wuerfel|,2)=FALSE
  275.       IF BTST(wuerfel|,3)=FALSE
  276.         ALINE lx3&,oy3&,lx4&,oy4&,1,TRUE,FALSE
  277.       ENDIF
  278.       IF BTST(wuerfel|,4)=FALSE
  279.         ALINE lx3&,oy1&,lx3&,oy3&,1,TRUE,FALSE
  280.       ENDIF
  281.       IF BTST(wuerfel|,5)=FALSE
  282.         ALINE lx4&,oy2&,lx4&,oy4&,1,TRUE,FALSE
  283.       ENDIF
  284.     ENDIF
  285.     IF BTST(wuerfel|,3)=FALSE
  286.       IF BTST(wuerfel|,0)=FALSE
  287.         ALINE lx1&,oy3&,lx2&,oy4&,1,TRUE,FALSE
  288.       ENDIF
  289.       IF BTST(wuerfel|,4)=FALSE
  290.         ALINE lx3&,oy3&,lx1&,oy3&,1,TRUE,FALSE
  291.       ENDIF
  292.       IF BTST(wuerfel|,5)=FALSE
  293.         ALINE lx2&,oy4&,lx4&,oy4&,1,TRUE,FALSE
  294.       ENDIF
  295.     ENDIF
  296.     INC lx1&
  297.     INC lx2&
  298.     INC lx3&
  299.     INC lx4&
  300.     INC oy1&
  301.     INC oy3&
  302.     INC oy2&
  303.     INC oy4&
  304.     CLR doppel!
  305.   NEXT l|
  306. RETURN
  307. > PROCEDURE punkte
  308.   RSET leer1$=STR$(figur&)
  309.   TEXT 575,66,leer1$
  310.   RSET leer$=STR$(punkte%)
  311.   TEXT 571,144,leer$
  312.   IF zaehler|=25
  313.     CLR zaehler|
  314.     IF level|<7
  315.       INC level|
  316.     ENDIF
  317.     @levelconfig
  318.   ENDIF
  319.   DEFTEXT ,,,6
  320.   TEXT 600,256,"  "
  321.   TEXT 600,256,intervall|
  322.   DEFTEXT ,,,13
  323.   PRINT AT(75,19);level|
  324.   INC zaehler|
  325.   BMOVE screen%(1),screen%(0),32000
  326. RETURN
  327. > PROCEDURE zufall
  328.   wert|=SUCC(RANDOM(7))
  329.   IF ultimo!
  330.     wert|=SUCC(RANDOM(4))
  331.   ENDIF
  332.   doppel|=2
  333.   CLR ultimo!
  334.   @figur
  335.   INC figur&
  336.   ADD punkte%,punkt|*faktor|
  337.   @punkte
  338.   @fig_dim
  339. RETURN
  340. > PROCEDURE figur
  341.   SELECT wert|
  342.   CASE 1
  343.     punkt|=1
  344.     RESTORE figur_1
  345.   CASE 2
  346.     punkt|=2
  347.     RESTORE figur_2
  348.   CASE 3
  349.     punkt|=2
  350.     RESTORE figur_3
  351.   CASE 4
  352.     punkt|=2
  353.     RESTORE figur_4
  354.   CASE 5
  355.     punkt|=3
  356.     RESTORE figur_5
  357.   CASE 6
  358.     punkt|=3
  359.     RESTORE figur_6
  360.   CASE 7
  361.     punkt|=3
  362.     RESTORE figur_7
  363.   ENDSELECT
  364.   FOR i|=1 TO 4
  365.     READ t|,b|,l|
  366.     f.feld|(t|,b|,l|)=1
  367.   NEXT i|
  368. figur_1:
  369.   DATA 0,1,0,0,2,0,0,2,1,0,1,0
  370. figur_2:
  371.   DATA 0,0,0,0,1,0,0,2,0,0,0,1
  372. figur_3:
  373.   DATA 0,0,0,0,1,0,0,2,0,0,1,1
  374. figur_4:
  375.   DATA 0,0,0,0,1,0,0,1,1,0,2,1
  376. figur_5:
  377.   DATA 0,2,0,1,1,0,1,2,0,1,2,1
  378. figur_6:
  379.   DATA 0,2,0,1,2,0,1,2,1,1,1,1
  380. figur_7:
  381.   DATA 0,2,0,1,2,0,1,1,0,1,1,1
  382. RETURN
  383. > PROCEDURE tief_schieben
  384.   SOUND 2,15,15,4,4
  385.   WAVE 3,4,12,8000
  386.   WAVE 0,0
  387.   FOR i|=0 TO PRED(l.t|)
  388.     FOR j|=0 TO 2
  389.       FOR k|=0 TO 3
  390.         IF f.feld|(i|,j|,k|)
  391.           IF feld|(SUCC(e1|+i|),j|,k|)
  392.             belegt!=-1
  393.           ENDIF
  394.         ENDIF
  395.       NEXT k|
  396.     NEXT j|
  397.   NEXT i|
  398.   IF belegt!
  399.     @setzen
  400.     ARRAYFILL f.feld|(),0
  401.     IF e1|=1
  402.       ultimo!=TRUE
  403.     ENDIF
  404.     CLR e1|
  405.     @zufall
  406.   ELSE
  407.     INC e1|
  408.   ENDIF
  409.   CLR belegt!
  410. RETURN
  411. > PROCEDURE oben_schieben
  412.   IF BTST(b|,0)
  413.     PRINT CHR$(7)
  414.   ELSE
  415.     BMOVE VARPTR(f.feld|(0,1,0)),VARPTR(p.feld|(0,0,0)),33
  416.     @uebernehmen
  417.   ENDIF
  418. RETURN
  419. > PROCEDURE unten_schieben
  420.   IF BTST(b|,2)
  421.     PRINT CHR$(7)
  422.   ELSE
  423.     BMOVE VARPTR(f.feld|(0,0,0)),VARPTR(p.feld|(0,1,0)),33
  424.     @uebernehmen
  425.   ENDIF
  426. RETURN
  427. > PROCEDURE rechts_schieben
  428.   IF BTST(l|,3)
  429.     PRINT CHR$(7)
  430.   ELSE
  431.     BMOVE VARPTR(f.feld|(0,0,0)),VARPTR(p.feld|(0,0,1)),27
  432.     @uebernehmen
  433.   ENDIF
  434. RETURN
  435. > PROCEDURE links_schieben
  436.   IF BTST(l|,0)
  437.     PRINT CHR$(7)
  438.   ELSE
  439.     BMOVE VARPTR(f.feld|(0,0,1)),VARPTR(p.feld|(0,0,0)),27
  440.     @uebernehmen
  441.   ENDIF
  442. RETURN
  443. > PROCEDURE rechts_drehen
  444.   IF l.l|<3 AND l.b|<3
  445.     j%=LEN(BIN$(l|))-2
  446.     IF j%<0
  447.       j%=0
  448.     ENDIF
  449.     d|=ABS(NOT BTST(b|,0))
  450.     f.adr%=VARPTR(f.feld|(0,d|,j%))
  451.     p.adr%=VARPTR(p.feld|(0,d|,j%))
  452.     BMOVE f.adr%,p.adr%+9,3
  453.     BMOVE f.adr%+9,p.adr%+12,3
  454.     BMOVE f.adr%+12,p.adr%+3,3
  455.     BMOVE f.adr%+3,p.adr%,3
  456.   ELSE
  457.     d|=ABS(NOT BTST(l|,0))
  458.     FOR i|=0 TO PRED(l.t|)
  459.       FOR j|=0 TO 2
  460.         p.feld|(i|,j|,d|)=f.feld|(i|,2,j|+d|)
  461.         p.feld|(i|,j|,1+d|)=f.feld|(i|,1,j|+d|)
  462.         p.feld|(i|,j|,2+d|)=f.feld|(i|,0,j|+d|)
  463.       NEXT j|
  464.     NEXT i|
  465.   ENDIF
  466.   @uebernehmen
  467. RETURN
  468. > PROCEDURE links_drehen
  469.   IF l.l|<3 AND l.b|<3
  470.     j%=LEN(BIN$(l|))-2
  471.     IF j%<0
  472.       j%=0
  473.     ENDIF
  474.     d|=ABS(NOT BTST(b|,0))
  475.     f.adr%=VARPTR(f.feld|(0,d|,j%))
  476.     p.adr%=VARPTR(p.feld|(0,d|,j%))
  477.     BMOVE f.adr%,p.adr%+3,3
  478.     BMOVE f.adr%+3,p.adr%+12,3
  479.     BMOVE f.adr%+12,p.adr%+9,3
  480.     BMOVE f.adr%+9,p.adr%,3
  481.   ELSE
  482.     d|=ABS(NOT BTST(l|,0))
  483.     FOR i|=0 TO 2
  484.       FOR j|=0 TO 2
  485.         p.feld|(i|,0,j|+d|)=f.feld|(i|,j|,2+d|)
  486.         p.feld|(i|,1,j|+d|)=f.feld|(i|,j|,1+d|)
  487.         p.feld|(i|,2,j|+d|)=f.feld|(i|,j|,d|)
  488.       NEXT j|
  489.     NEXT i|
  490.   ENDIF
  491.   @uebernehmen
  492. RETURN
  493. > PROCEDURE oben_rollen
  494.   IF l.b|<3 AND l.t|<3
  495.     d|=ABS(NOT BTST(b|,0))
  496.     FOR k|=0 TO 3
  497.       IF BTST(l|,k|)
  498.         p.feld|(1,d|,k|)=f.feld|(0,d|,k|)
  499.         p.feld|(0,d|,k|)=f.feld|(0,SUCC(d|),k|)
  500.         p.feld|(0,SUCC(d|),k|)=f.feld|(1,SUCC(d|),k|)
  501.         p.feld|(1,SUCC(d|),k|)=f.feld|(1,d|,k|)
  502.       ENDIF
  503.     NEXT k|
  504.   ELSE
  505.     FOR k|=0 TO 3
  506.       IF BTST(l|,k|)
  507.         FOR j|=0 TO 2
  508.           p.feld|(0,j|,k|)=f.feld|(j|,2,k|)
  509.           p.feld|(1,j|,k|)=f.feld|(j|,1,k|)
  510.           p.feld|(2,j|,k|)=f.feld|(j|,0,k|)
  511.         NEXT j|
  512.       ENDIF
  513.     NEXT k|
  514.   ENDIF
  515.   @hochsetzen
  516.   @uebernehmen
  517. RETURN
  518. > PROCEDURE unten_rollen
  519.   IF l.b|<3 AND l.t|<3
  520.     d|=ABS(NOT BTST(b|,0))
  521.     FOR k|=0 TO 3
  522.       IF BTST(l|,k|)
  523.         p.feld|(0,SUCC(d|),k|)=f.feld|(0,d|,k|)
  524.         p.feld|(0,d|,k|)=f.feld|(1,d|,k|)
  525.         p.feld|(1,d|,k|)=f.feld|(1,SUCC(d|),k|)
  526.         p.feld|(1,SUCC(d|),k|)=f.feld|(0,SUCC(d|),k|)
  527.       ENDIF
  528.     NEXT k|
  529.   ELSE
  530.     FOR k|=0 TO 3
  531.       IF BTST(l|,k|)
  532.         FOR j|=0 TO 2
  533.           p.feld|(j|,0,k|)=f.feld|(2,j|,k|)
  534.           p.feld|(j|,1,k|)=f.feld|(1,j|,k|)
  535.           p.feld|(j|,2,k|)=f.feld|(0,j|,k|)
  536.         NEXT j|
  537.       ENDIF
  538.     NEXT k|
  539.   ENDIF
  540.   @hochsetzen
  541.   @uebernehmen
  542. RETURN
  543. > PROCEDURE rechts_rollen
  544.   IF l.l|<3 AND l.t|<3
  545.     k%=LEN(BIN$(l|))-2
  546.     IF k%<0
  547.       k%=0
  548.     ENDIF
  549.     FOR j|=0 TO 2
  550.       p.feld|(0,j|,SUCC(k%))=f.feld|(0,j|,k%)
  551.       p.feld|(0,j|,k%)=f.feld|(1,j|,k%)
  552.       p.feld|(1,j|,k%)=f.feld|(1,j|,SUCC(k%))
  553.       p.feld|(1,j|,SUCC(k%))=f.feld|(0,j|,SUCC(k%))
  554.     NEXT j|
  555.   ELSE
  556.     d|=ABS(NOT BTST(l|,0))
  557.     FOR j|=0 TO 2
  558.       FOR k|=0 TO 2
  559.         p.feld|(k|,j|,d|)=f.feld|(2,j|,k|+d|)
  560.         p.feld|(k|,j|,1+d|)=f.feld|(1,j|,k|+d|)
  561.         p.feld|(k|,j|,2+d|)=f.feld|(0,j|,k|+d|)
  562.       NEXT k|
  563.     NEXT j|
  564.   ENDIF
  565.   @hochsetzen
  566.   @uebernehmen
  567. RETURN
  568. > PROCEDURE links_rollen
  569.   IF l.l|<3 AND l.t|<3
  570.     k%=LEN(BIN$(l|))-2
  571.     IF k%<0
  572.       k%=0
  573.     ENDIF
  574.     FOR j|=0 TO 2
  575.       p.feld|(1,j|,k%)=f.feld|(0,j|,k%)
  576.       p.feld|(0,j|,k%)=f.feld|(0,j|,SUCC(k%))
  577.       p.feld|(0,j|,SUCC(k%))=f.feld|(1,j|,SUCC(k%))
  578.       p.feld|(1,j|,SUCC(k%))=f.feld|(1,j|,k%)
  579.     NEXT j|
  580.   ELSE
  581.     d|=ABS(NOT BTST(l|,0))
  582.     FOR j|=0 TO 2
  583.       FOR k|=0 TO 2
  584.         p.feld|(2,j|,k|+d|)=f.feld|(k|,j|,0+d|)
  585.         p.feld|(0,j|,k|+d|)=f.feld|(k|,j|,2+d|)
  586.         p.feld|(1,j|,k|+d|)=f.feld|(k|,j|,1+d|)
  587.       NEXT k|
  588.     NEXT j|
  589.   ENDIF
  590.   @hochsetzen
  591.   @uebernehmen
  592. RETURN
  593. > PROCEDURE uebernehmen
  594.   FOR i|=0 TO 2
  595.     FOR j|=0 TO 2
  596.       FOR k|=0 TO 3
  597.         IF p.feld|(i|,j|,k|)
  598.           IF feld|(ADD(i|,e1|),j|,k|)
  599.             belegt!=-1
  600.           ENDIF
  601.         ENDIF
  602.       NEXT k|
  603.     NEXT j|
  604.   NEXT i|
  605.   IF belegt!
  606.     PRINT CHR$(7)
  607.   ELSE
  608.     SWAP p.feld|(),f.feld|()
  609.     @fig_dim
  610.   ENDIF
  611.   ARRAYFILL p.feld|(),0
  612.   CLR belegt!
  613. RETURN
  614. > PROCEDURE fig_dim
  615.   CLR t|,b|,l|,l.t|,l.b|,l.l|
  616.   FOR i|=0 TO 2
  617.     FOR j|=0 TO 2
  618.       FOR k|=0 TO 3
  619.         IF f.feld|(i|,j|,k|)
  620.           l|=BSET(l|,k|)
  621.           b|=BSET(b|,j|)
  622.           t|=BSET(t|,i|)
  623.         ENDIF
  624.       NEXT k|
  625.     NEXT j|
  626.   NEXT i|
  627.   FOR i|=0 TO 3
  628.     IF BTST(t|,i|)
  629.       INC l.t|
  630.     ENDIF
  631.     IF BTST(b|,i|)
  632.       INC l.b|
  633.     ENDIF
  634.     IF BTST(l|,i|)
  635.       INC l.l|
  636.     ENDIF
  637.   NEXT i|
  638. RETURN
  639. > PROCEDURE hochsetzen
  640.   FOR i%=0 TO 1
  641.     CLR fin!
  642.     FOR j|=0 TO 2
  643.       FOR k|=0 TO 3
  644.         IF p.feld|(pos|,j|,k|)
  645.           fin!=TRUE
  646.         ENDIF
  647.         EXIT IF fin!
  648.       NEXT k|
  649.     NEXT j|
  650.     IF fin!=FALSE
  651.       BMOVE VARPTR(p.feld|(1,0,0)),VARPTR(p.feld|(0,0,0)),35
  652.       p.feld|(2,2,3)=0
  653.     ENDIF
  654.     EXIT IF fin!
  655.   NEXT i%
  656. RETURN
  657. > PROCEDURE setzen
  658.   LOCAL i|,j|,k|
  659.   REPEAT
  660.     IF e1|>0
  661.       @anzeige
  662.     ENDIF
  663.     FOR i|=0 TO PRED(l.t|)
  664.       FOR j|=0 TO 2
  665.         FOR k|=0 TO 3
  666.           IF f.feld|(i|,j|,k|)
  667.             IF feld|(SUCC(i|)+e1|,j|,k|)
  668.               ende!=-1
  669.             ENDIF
  670.           ENDIF
  671.         NEXT k|
  672.         EXIT IF ende!
  673.       NEXT j|
  674.       EXIT IF ende!
  675.     NEXT i|
  676.     INC e1|
  677.   UNTIL ende!
  678.   DEC e1|
  679.   CLR ende!
  680.   '
  681.   FOR i|=0 TO PRED(l.t|)
  682.     FOR j|=0 TO 2
  683.       FOR k|=0 TO 3
  684.         IF f.feld|(i|,j|,k|)
  685.           feld|(i|+e1|,j|,k|)=1
  686.         ENDIF
  687.       NEXT k|
  688.     NEXT j|
  689.   NEXT i|
  690.   @ebene_voll
  691.   @fuellen
  692.   FOR j|=0 TO 2
  693.     FOR k|=0 TO 1
  694.       IF feld|(1,j|,k|)
  695.         ultimo!=-1
  696.       ENDIF
  697.       IF feld|(0,j|,k|)
  698.         IF h_punkte%<punkte%
  699.           h_punkte%=punkte%
  700.         ENDIF
  701.         ende1!=-1
  702.         SOUND 1,15,12,4
  703.         WAVE 1,1,9,60000,30
  704.         SOUND 1,15,8,4
  705.         WAVE 1,1,9,60000,30
  706.         SOUND 1,15,3,4
  707.         WAVE 1,1,9,60000,40
  708.         WAVE 0,0
  709.         IF punkte%>pkt%(12)
  710.           best!=TRUE
  711.           @best_liste
  712.         ENDIF
  713.         @ende
  714.       ENDIF
  715.     NEXT k|
  716.   NEXT j|
  717. RETURN
  718. > PROCEDURE fuellen
  719.   LOCAL s1|
  720.   VOID XBIOS(5,L:screen%(0),L:screen%(1),-1)
  721.   BMOVE VARPTR(hoch|(0,0)),VARPTR(hoch1|(0,0)),12
  722.   FOR j|=0 TO 2
  723.     FOR k|=0 TO 3
  724.       CLR ende!
  725.       FOR i|=0 TO 9
  726.         IF feld|(i|,j|,k|)
  727.           hoch|(j|,k|)=i|
  728.           ende!=TRUE
  729.         ENDIF
  730.         EXIT IF ende!
  731.       NEXT i|
  732.     NEXT k|
  733.   NEXT j|
  734.   CLR ende!
  735.   DEFFILL 1,0
  736.   FOR i|=0 TO 9
  737.     FOR j|=0 TO 2
  738.       FOR k|=0 TO 3
  739.         IF hoch|(j|,k|)=i|
  740.           s1|=s|(hoch1|(j|,k|))
  741.           IF k|=0 OR j|=0
  742.             x&(0)=li|(i|)+s|(i|)*SUCC(k|)
  743.             y&(0)=ob|(i|)+s|(i|)*SUCC(j|)
  744.             x&(1)=li|(hoch1|(j|,k|))+s1|*SUCC(k|)
  745.             y&(1)=ob|(hoch1|(j|,k|))+s1|*SUCC(j|)
  746.             IF k|=0
  747.               x&(2)=x&(1)
  748.               y&(2)=ob|(hoch1|(j|,k|))+s1|*j|
  749.               x&(3)=x&(0)
  750.               y&(3)=ob|(i|)+s|(i|)*j|
  751.               POLYFILL 4,x&(),y&()
  752.             ENDIF
  753.             IF j|=0
  754.               x&(3)=li|(i|)+s|(i|)*k|
  755.               y&(3)=y&(0)
  756.               x&(2)=li|(hoch1|(j|,k|))+s1|*k|
  757.               y&(2)=y&(1)
  758.               POLYFILL 4,x&(),y&()
  759.             ENDIF
  760.           ENDIF
  761.           IF j|=2 OR k|=3
  762.             x&(0)=li|(hoch1|(j|,k|))+s1|*k|
  763.             y&(0)=ob|(hoch1|(j|,k|))+s1|*j|
  764.             x&(1)=li|(i|)+s|(i|)*k|
  765.             y&(1)=ob|(i|)+s|(i|)*j|
  766.             IF k|=3
  767.               x&(2)=x&(1)
  768.               y&(2)=ob|(i|)+s|(i|)*SUCC(j|)
  769.               x&(3)=x&(0)
  770.               y&(3)=ob|(hoch1|(j|,k|))+s1|*SUCC(j|)
  771.               POLYFILL 4,x&(),y&()
  772.             ENDIF
  773.             IF j|=2
  774.               x&(2)=li|(i|)+s|(i|)*SUCC(k|)
  775.               y&(2)=y&(1)
  776.               x&(3)=li|(hoch1|(j|,k|))+s1|*SUCC(k|)
  777.               y&(3)=y&(0)
  778.               POLYFILL 4,x&(),y&()
  779.             ENDIF
  780.           ENDIF
  781.         ENDIF
  782.       NEXT k|
  783.     NEXT j|
  784.   NEXT i|
  785.   i|=10
  786.   REPEAT
  787.     DEC i|
  788.     FOR j|=0 TO 2
  789.       FOR k|=0 TO 3
  790.         SELECT i|
  791.         CASE 0
  792.           DEFFILL 1,2,20
  793.         CASE 1
  794.           DEFFILL 1,2,19
  795.         CASE 2
  796.           DEFFILL 1,2,12
  797.         CASE 3
  798.           DEFFILL 1,2,11
  799.         CASE 4
  800.           DEFFILL 1,2,16
  801.         CASE 5
  802.           DEFFILL 1,2,4
  803.         CASE 6
  804.           DEFFILL 1,2,22
  805.         CASE 7
  806.           DEFFILL 1,2,3
  807.         CASE 8
  808.           DEFFILL 1,2,2
  809.         CASE 9
  810.           DEFFILL 1,3,3
  811.         ENDSELECT
  812.         IF hoch|(j|,k|)=i|
  813.           PBOX li|(i|)+s|(i|)*k|,ob|(i|)+s|(i|)*j|,li|(i|)+s|(i|)*SUCC(k|),ob|(i|)+s|(i|)*SUCC(j|)
  814.         ENDIF
  815.         IF feld|(i|,j|,k|)
  816.           PBOX 510+k|*10,21+i|*37+j|*10,510+SUCC(k|)*10,21+i|*37+SUCC(j|)*10
  817.         ENDIF
  818.       NEXT k|
  819.     NEXT j|
  820.   UNTIL i|=0
  821.   IF voll1!
  822.     WAVE 1,0
  823.     SOUND 1,15,20,5
  824.     WAVE 1,1,9,3000,3
  825.     WAVE 1,0
  826.     SOUND 1,15,16,5
  827.     WAVE 1,1,9,3000,3
  828.     WAVE 1,0
  829.     SOUND 1,15,8,3
  830.     WAVE 1,1,9,3000,3
  831.     WAVE 0,0
  832.   ENDIF
  833.   VSYNC
  834.   BMOVE screen%(0),screen%(1),32000
  835.   VOID XBIOS(5,L:screen%(1),L:screen%(1),-1)
  836. RETURN
  837. > PROCEDURE ende
  838.   IF ende1!
  839.     ALERT 2,"Wollen Sie 'SETZ AB' beenden,|oder wollen Sie es nocheinmal|versuchen ?",2,"Ende|Neustart",b.alert|
  840.   ELSE
  841.     ALERT 2,"Wollen Sie 'SETZ AB' beenden,|weiterspielen, oder wollen|Sie es nocheinmal versuchen ?",3,"Ende|Neustart|Weiter",b.alert|
  842.   ENDIF
  843.   IF b.alert|=1
  844.     VOID XBIOS(5,L:screen%(1),L:screen%(1),-1)
  845.     VOID GEMDOS(&H49,L:adresse%)
  846.     RESERVE FRE(0)+GEMDOS(&H48,L:-1)-17000
  847.     EDIT
  848.   ENDIF
  849.   IF b.alert|=2
  850.     @level
  851.     @hilfs_bs
  852.     CLR e|,e1|,punkte%,figur&,ultimo!,doppel!,ende!,best!,ende1!,zaehler|
  853.     ARRAYFILL feld|(),0
  854.     ARRAYFILL f.feld|(),0
  855.     ARRAYFILL hoch|(),10
  856.     FOR j|=0 TO 2
  857.       FOR k|=0 TO 3
  858.         feld|(10,j|,k|)=1
  859.       NEXT k|
  860.     NEXT j|
  861.     @bildaufbau
  862.     @zufall
  863.   ENDIF
  864.   IF b.alert|=3
  865.     zeit%=TIMER-t|*200
  866.   ENDIF
  867. RETURN
  868. > PROCEDURE ebene_voll
  869.   CLR voll1!
  870.   FOR i|=0 TO 9
  871.     voll!=TRUE
  872.     FOR j|=0 TO 2
  873.       FOR k|=0 TO 3
  874.         IF feld|(i|,j|,k|)=FALSE
  875.           CLR voll!
  876.         ENDIF
  877.       NEXT k|
  878.     NEXT j|
  879.     IF voll!
  880.       VOID XBIOS(5,L:screen%(0),L:screen%(1),-1)
  881.       l|=i|
  882.       REPEAT
  883.         DEC l|
  884.         FOR j|=0 TO 2
  885.           FOR k|=0 TO 3
  886.             feld|(SUCC(l|),j|,k|)=feld|(l|,j|,k|)
  887.           NEXT k|
  888.         NEXT j|
  889.       UNTIL l|=0
  890.       ARRAYFILL hoch|(),10
  891.       VSYNC
  892.       SPUT bild$
  893.       voll1!=-1
  894.     ENDIF
  895.   NEXT i|
  896. RETURN
  897. > PROCEDURE hilfs_bs
  898.   DEFFILL 1,2,5
  899.   PBOX 0,0,640,400
  900.   DEFFILL 1,0
  901.   PBOX 20,50,310,350
  902.   PBOX 350,50,620,350
  903.   DEFFILL 1,2,1
  904.   PBOX 70,100,220,250
  905.   ALINE 270,150,270,300,1,-1,0
  906.   ALINE 120,300,270,300,1,-1,0
  907.   ALINE 220,250,270,300,1,-1,0
  908.   ALINE 70,250,120,300,1,-1,0
  909.   ALINE 220,100,270,150,1,-1,0
  910.   DEFLINE 1,5,1,1
  911.   CIRCLE 145,175,30,200,3400
  912.   ELLIPSE 247,200,12,30,200,3400
  913.   ELLIPSE 170,277,30,12,1100,700
  914.   LINE 110,75,180,75
  915.   LINE 45,140,45,210
  916.   COLOR 1
  917.   ACHAR 49,143,55,2,0,0
  918.   ACHAR 50,27,167,2,0,0
  919.   ACHAR 51,142,167,2,0,0
  920.   ACHAR 52,245,192,2,0,0
  921.   ACHAR 53,167,269,2,0,0
  922.   DEFTEXT 1,1,,13
  923.   TEXT 410,70,"Tastaturbelegung !"
  924.   PRINT AT(49,6);"Aktion","Taste"
  925.   DEFTEXT 1,0,,6
  926.   TEXT 352,105,265,"(1) rechts schieben -  Cursor rechts"
  927.   TEXT 352,118,265,"(1) links  schieben -  Cursor links "
  928.   TEXT 352,131,265,"(2) oben   schieben -  Cursor oben  "
  929.   TEXT 352,144,265,"(2) unten  schieben -  Cursor unten "
  930.   TEXT 352,157,265,"(3) rechts drehen   - ^Clr Home     "
  931.   TEXT 352,170,265,"(3) links  drehen   - ^Insert       "
  932.   TEXT 352,183,265,"(4) oben   rollen   - ^Cursor oben  "
  933.   TEXT 352,196,265,"(4) unten  rollen   - ^Cursor unten "
  934.   TEXT 352,209,265,"(5) rechts rollen   - ^Cursor rechts"
  935.   TEXT 352,222,265,"(5) links  rollen   - ^Cursor links "
  936.   TEXT 352,235,265,"    Figur  setzen   -  Leertaste    "
  937.   TEXT 355,273,265,"Diesen Bildschirm zeigen -  Help    "
  938.   TEXT 355,286,265,"Spiel abbrechen/beenden  -  Esc     "
  939.   TEXT 355,299,265,"Besten - Liste           -  Tab     "
  940.   DEFTEXT ,,,13
  941.   PRINT AT(46,21);">>> bitte eine Taste drücken <<<"
  942.   KEYGET dummy%
  943.   DEFLINE 1,1,0,0
  944. RETURN
  945. > PROCEDURE level
  946.   LOCAL a.level|
  947.   DEFMOUSE 0
  948.   BOUNDARY 0
  949.   FOR i|=1 TO 8
  950.     DEFFILL 1,2,i|
  951.     PBOX i|*20,i|*5,640-i|*20,400-i|*5
  952.   NEXT i|
  953.   DEFFILL 1,0
  954.   PBOX 180,55,460,345
  955.   DEFTEXT 1,1,,13
  956.   TEXT 190,75,"Level                 einstellen"
  957.   DEFTEXT 1,0,,6
  958.   TEXT 240,75,120,"(Zeit-Intervall)"
  959.   PRINT AT(25,7);"Nach jedem Zeit-Intervall fällt"
  960.   PRINT AT(25,8);"die Figur um 1 Ebene nach unten."
  961.   PRINT AT(25,18);"Punkteberechnung:   Jede Figur"
  962.   PRINT AT(25,19);"wird mit  Faktor multipliziert."
  963.   PRINT AT(25,21);">>> Weiter mit Eingabetaste <<<"
  964.   ATEXT 205,142,1,"Level 1 | 10 sec.  Faktor  1"
  965.   ATEXT 205,160,1,"Level 2 |  7 sec.  Faktor  2"
  966.   ATEXT 205,178,1,"Level 3 |  5 sec.  Faktor  4"
  967.   ATEXT 205,196,1,"Level 4 |  4 sec.  Faktor  6"
  968.   ATEXT 205,214,1,"Level 5 |  3 sec.  Faktor 10"
  969.   ATEXT 205,232,1,"Level 6 |  2 sec.  Faktor 18"
  970.   ATEXT 205,250,1,"Level 7 |  1 sec.  Faktor 30"
  971.   FOR i|=0 TO 108 STEP 18
  972.     BOX 200,137+i|,340,153+i|
  973.   NEXT i|
  974.   level|=1
  975.   a.level|=1
  976.   GRAPHMODE 3
  977.   DEFFILL 1,1
  978.   PBOX 201,138,339,152
  979.   REPEAT
  980.     MOUSE x&,y&,k|
  981.     IF x&>200 AND x&<340 AND y&>136 AND y&<261 AND k|
  982.       level|=(y&-119)/18
  983.       PBOX 201,120+level|*18,339,134+level|*18
  984.       PBOX 201,120+a.level|*18,339,134+a.level|*18
  985.       a.level|=level|
  986.       PAUSE 10
  987.     ENDIF
  988.   UNTIL INKEY$=CHR$(13)
  989.   BOUNDARY 1
  990.   GRAPHMODE 1
  991.   DEFMOUSE STRING$(74,MKI$(0))
  992.   @levelconfig
  993. RETURN
  994. > PROCEDURE levelconfig
  995.   SELECT level|
  996.   CASE 1
  997.     faktor|=1
  998.     intervall|=10
  999.   CASE 2
  1000.     faktor|=2
  1001.     intervall|=7
  1002.   CASE 3
  1003.     faktor|=4
  1004.     intervall|=5
  1005.   CASE 4
  1006.     faktor|=6
  1007.     intervall|=4
  1008.   CASE 5
  1009.     faktor|=10
  1010.     intervall|=3
  1011.   CASE 6
  1012.     faktor|=16
  1013.     intervall|=2
  1014.   CASE 7
  1015.     faktor|=30
  1016.     intervall|=1
  1017.   ENDSELECT
  1018. RETURN
  1019. > PROCEDURE titelbild
  1020.   DEFFILL 1,1
  1021.   PBOX 0,0,640,400
  1022.   VOID XBIOS(5,L:screen%(0),L:screen%(1),-1)
  1023.   CLS
  1024.   DEFFILL 1,2,19
  1025.   PBOX 0,0,640,270
  1026.   BOUNDARY 0
  1027.   DEFFILL 1,0
  1028.   PBOX 20,20,576,260
  1029.   GRAPHMODE 3
  1030.   DEFFILL 1,1
  1031.   PRBOX 20,20,120,260
  1032.   PRBOX 40,40,120,130
  1033.   PRBOX 20,150,100,240
  1034.   PBOX 130,60,200,220
  1035.   PBOX 148,76,200,133
  1036.   PBOX 148,147,200,204
  1037.   PBOX 205,90,265,190
  1038.   PBOX 205,102,229,190
  1039.   PBOX 241,102,265,190
  1040.   PBOX 270,111,308,120
  1041.   PBOX 270,160,308,168
  1042.   GRAPHMODE 1
  1043.   LINE 308,111,270,160
  1044.   LINE 270,168,308,120
  1045.   FILL 287,140
  1046.   DEFFILL 1,0
  1047.   PBOX 110,120,120,129
  1048.   PBOX 20,151,30,160
  1049.   BOX 313,111,389,168
  1050.   DRAW 314,130 TO 389,130 TO 576,99
  1051.   DRAW 314,149 TO 389,149 TO 576,179
  1052.   DRAW 333,167 TO 333,111 TO 240,19
  1053.   LINE 352,167,352,19
  1054.   LINE 371,111,464,19
  1055.   LINE 371,128,391,128
  1056.   ALINE 128,19,313,111,1,-1,0
  1057.   ALINE 389,111,576,19,1,-1,0
  1058.   ALINE 389,168,576,260,1,-1,0
  1059.   ALINE 313,168,111,260,1,-1,0
  1060.   DEFFILL 1,2,16
  1061.   BOUNDARY 1
  1062.   PBOX 355,109,374,169
  1063.   BOUNDARY 0
  1064.   PBOX 373,110,391,127
  1065.   DRAW 129,19 TO 576,19 TO 576,260
  1066.   DRAW 181,46 TO 520,46 TO 520,233
  1067.   DRAW 221,66 TO 480,66 TO 480,212
  1068.   DRAW 251,81 TO 452,81 TO 452,198
  1069.   DRAW 271,89 TO 432,89 TO 432,190
  1070.   DRAW 284,97 TO 418,97 TO 418,183
  1071.   DRAW 296,102 TO 408,102 TO 408,176
  1072.   DRAW 300,105 TO 401,105 TO 401,173
  1073.   DRAW 303,107 TO 396,107 TO 396,170
  1074.   DRAW 311,109 TO 392,109 TO 392,169
  1075.   DEFLINE 1,3
  1076.   DRAW 135,258 TO 307,178 TO 346,258
  1077.   LINE 220,218,327,218
  1078.   DRAW 427,196 TO 400,183 TO 385,178 TO 360,178 TO 360,258 TO 500,258
  1079.   DRAW 380,218 TO 457,218 TO 477,221 TO 507,239
  1080.   CIRCLE 420,206,12,2700,900
  1081.   CIRCLE 497,246,12,2700,900
  1082.   FOR i|=1 TO 7
  1083.     DEFFILL 1,2,i|
  1084.     PBOX 0,263+i|*17,640,263+SUCC(i|)*17
  1085.   NEXT i|
  1086.   BOUNDARY 1
  1087.   PRINT AT(23,28);" Weiter mit Eingabetaste ";
  1088.   DEFTEXT ,,900,13
  1089.   TEXT 638,260," von Werner Lang  - Stuttgart "
  1090.   TEXT 622,260," Version 1,0 "
  1091.   BMOVE screen%(0),screen%(1),32000
  1092.   VOID XBIOS(5,L:screen%(1),L:screen%(1),-1)
  1093.   REPEAT
  1094.   UNTIL INKEY$=CHR$(13)
  1095.   DEFTEXT ,,0
  1096.   DEFLINE 1,1
  1097.   CLS
  1098. RETURN
  1099. > PROCEDURE best_liste
  1100.   CLS
  1101.   BOUNDARY 0
  1102.   FOR i|=1 TO 8
  1103.     DEFFILL 1,2,i|
  1104.     PBOX i|*20,i|*5,640-i|*20,400-i|*5
  1105.   NEXT i|
  1106.   DEFFILL 1,0
  1107.   PBOX 180,50,460,350
  1108.   DEFTEXT 1,9
  1109.   BOUNDARY 1
  1110.   TEXT 260,70,"Besten - Liste"
  1111.   DEFTEXT ,0
  1112.   PRINT AT(34,6);"Name","Punkte"
  1113.   CLR k|
  1114.   FOR i|=1 TO 12
  1115.     PRINT AT(25,7+i|);USING "##",i|;
  1116.     IF punkte%>pkt%(i|) AND k|=0 AND best!
  1117.       PRINT ". _________________    ___ ___"
  1118.       PRINT AT(50,i|+7);USING "###_ ###",punkte%
  1119.       INSERT nam$(i|)=""
  1120.       INSERT pkt%(i|)=punkte%
  1121.       k|=i|
  1122.     ELSE
  1123.       IF pkt%(i|)>0
  1124.         PRINT AT(29,i|+7);nam$(i|)
  1125.         PRINT AT(50,i|+7);USING "###_ ###",pkt%(i|)
  1126.       ELSE
  1127.         PRINT ". _________________    ___ ___"
  1128.       ENDIF
  1129.     ENDIF
  1130.   NEXT i|
  1131.   IF k|
  1132.     LOCATE 29,k|+7
  1133.     FORM INPUT 17,nam$(k|)
  1134.     @speichern
  1135.   ENDIF
  1136.   PRINT AT(26,21);">>> Weiter mit Eingabetaste <<<"
  1137.   REPEAT
  1138.   UNTIL INKEY$=CHR$(13)
  1139. RETURN
  1140. > PROCEDURE speichern
  1141.   a$=SPACE$(17)
  1142.   b$=SPACE$(7)
  1143.   OPEN "R",#1,"punkte.dat"
  1144.   FIELD #1,17 AS a$,6 AS b$
  1145.   FOR i|=1 TO 12
  1146.     LSET a$=nam$(i|)
  1147.     LSET b$=STR$(pkt%(i|))
  1148.     PUT #1,i|
  1149.   NEXT i|
  1150.   CLOSE #1
  1151. RETURN
  1152. > PROCEDURE laden
  1153.   IF EXIST("punkte.dat")
  1154.     OPEN "R",#1,"punkte.dat"
  1155.     FIELD #1,17 AS a$,6 AS b$
  1156.     FOR i|=1 TO 12
  1157.       GET #1,i|
  1158.       nam$(i|)=a$
  1159.       pkt%(i|)=VAL(b$)
  1160.     NEXT i|
  1161.     CLOSE #1
  1162.   ENDIF
  1163. RETURN
  1164.